import axios from 'axios'
import config from '@/config'

// 接口超时设置
axios.defaults.timeout = config.TIMEOUT

// 接口白名单
const requestWhiteList = ['/login']

// HTTP request 拦截器
axios.interceptors.request.use(
  (request) => {
    // 设置Token登录信息
		// let token = tool.session.get('token')
		// let xAuthToken = tool.session.get('xAuthToken')
		// let userCode = tool.session.get('userCode')

		// if (token && xAuthToken && userCode) {
		// 	Object.assign(config.HEADERS, {
		// 		'AUTH_TOKEN': token,
		// 		'x-auth-token': xAuthToken,
		// 		'USER_CODE': userCode
		// 	})
		// } else if (!requestWhiteList.some((item) => { return (request.url as string).includes(item) })) {
		// 	if (!modal_error_401) {
		// 		modal_error_401 = true
		// 		Modal.error({
		// 			title: '无权限访问',
		// 			content: '当前用户已被登出或无权限访问当前资源，请尝试重新登录后再操作。',
		// 			okText: '重新登录',
		// 			onOk: () => {
		// 				modal_error_401 = false
		// 				router.replace({path: '/login'})
		// 			}
		// 		})
		// 		return Promise.reject()
		// 	}
		// }

		// Object.assign(request.headers, config.HEADERS)
		return request
	},
	(error) => {
		return Promise.reject(error)
	}
)

// 添加响应拦截器
axios.interceptors.response.use(
	(response) => {
		// 2xx 范围内的状态码都会触发该函数。
		// 对响应数据做点什么
		// dataAxios 是 axios 返回数据中的 data
		const dataAxios = response.data
		// 这个状态码是和后端约定的
    const code = dataAxios.code
		return response
	},
	(error) => {
		// 超出 2xx 范围的状态码都会触发该函数。
		// 对响应错误做点什么
		console.log(error)
		return Promise.reject(error)
	}
)

const http = {
  /** get 请求
  * @param {string} url 接口地址
  * @param {object} params 请求参数
  * @param {object} settings 配置参数
  */
  get(url, params = {}, settings = {}) {
    return new Promise((resolve, reject) => {
      axios({
        method: 'get',
        url: url,
        params: params,
        ...settings
      }).then((response) => {
        resolve(response.data)  
      }).catch((error) => {
        reject(error)
      })
    })
  },

  /** post 请求
  * @param {string} url 接口地址
  * @param {object} params 请求参数
  * @param {object} settings 配置参数
  */
  post(url, data = {}, settings = {}) {
    return new Promise((resolve, reject) => {
      axios({
        method: 'post',
        url: url,
        data: data,
        ...settings
      }).then((response) => {
        resolve(response.data)
      }).catch((error) => {
        reject(error)
      })
    })
  },

  /** down 请求
	 * @param  {string} url 接口地址
	 * @param  {object} data 请求参数
	 * @param  {object} settings 配置参数
	 */
  down (url, data = {}, settings = {}) {
		return new Promise((resolve, reject) => {
			axios({
				url: url,
				data: data,
				responseType: 'blob',
				...settings
			}).then((response) => {
				resolve(response.data)
			}).catch((error) => {
				reject(error)
			})
		})
	}
}

export default http
